

var fn1 = function() {
  this.foo = function () {
    console.log(111)
  }
}

let f1 = new  fn1();

var fn2 = function () {
  fn2.property.foo = function () {
    console.log(111)
  }
}

let f2 = new fn2();

/*
* closure trap
* */

function foo() {
  var el = document.getElementById('btn');
  //function调用的作用域和foo作用域不一致
  el.onclick = function () {
    console.log(el.id)
  }
}

foo();

function foo() {
  var el = document.getElementById('btn');
  //调用的作用域和foo作用域不一致
  el.onclick = function () {
    console.log(el.id)
  };
  // 清除代码的引用
  el = null;
}

foo();

/*
* 避免属性访问方法
* */

// 提供成员实例访问方法
function Person1() {
  this.name = '123';
  this.age = 13;
  this.getAge = function () {
    return this.age
  }
}

const p1 = new Person1();
const a = p1.getAge();

function Person2() {
  this.name = '123';
  this.age = 13;
}

const p2 = new Person2();
const b = p2.age;

/*
* For循环优化
* */

/*
* 采用最优循环方式
* */
let arr = [1, 2, 3, 4, 5];

arr.forEach(item => console.log(item)); // faster

for (let i = arr.length; i ; i--) { // slower
  console.log(arr[i])
}

for (let i in arr) {  // slowest
  console.log(arr[i])
}

/*
* 节点添加优化 文档碎片？？？
* */

let op = document.createElement('p');
document.body.appendChild(op)

const fragEle = document.createDocumentFragment();
fragEle.appendChild(op);

/*
* 克隆优化节点操作
* */


/*
* 直接量替换 new Object
* 定义对象或者数组 new/字面量
* */
let a = [1, 2, 3];
let b = new Array(1, 2, 3);
